package modelo.adaptadores;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;

import modelo.Cliente;
import modelo.Direccion;
import modelo.Empresa;
import modelo.Persona;
import modelo.enums.Tarifa;

public class ClienteAdapter extends XmlAdapter<ClienteAdapter.AdaptedCliente, Cliente>
{

    @Override
    public AdaptedCliente marshal(Cliente cliente) throws Exception
    {
        if (cliente == null)
            return null;
        return cliente.mapea();
    }

    @Override
    public Cliente unmarshal(AdaptedCliente adaptedCliente) throws Exception
    {
        if (adaptedCliente == null)
            return null;
        if (adaptedCliente.apellidos != null)
        {
            Persona persona = new Persona();
            persona.setNombre(adaptedCliente.nombre);
            persona.setApellidos(adaptedCliente.apellidos);
            persona.setNif(adaptedCliente.nif);
            persona.setDireccion(adaptedCliente.direccion);
            persona.setTarifa(adaptedCliente.tarifa);
            return persona;
        }
        else
        {
            Empresa empresa = new Empresa();
            empresa.setNombre(adaptedCliente.nombre);
            empresa.setNif(adaptedCliente.nif);
            empresa.setDireccion(adaptedCliente.direccion);
            empresa.setTarifa(adaptedCliente.tarifa);
            return empresa;
        }
    }

    @XmlRootElement(name = "cliente")
    public static class AdaptedCliente
    {
        @XmlElement
        public String nombre;
        @XmlElement
        public String apellidos;
        @XmlElement
        public String nif;
        @XmlElement
        public Direccion direccion;
        @XmlElement
        public Tarifa tarifa;
    }
}